During execution, all software applications have dependency relationships (i.e., binding relationships) with system resources provided to the applications by the operating system. When software applications have extremely long run times, these dependency relationships may need to change for reasons such as: (1) failure of a system resource; or (2) administrative removal of a system resource for preventative maintenance or dynamic reallocation.
In many cases, software applications may be critically dependent on the continued availability of certain system resources in order to provide a certain level of performance. For example, a database program may rely on the availability of a large block of locked memory, a multiprocessing application may be configured to execute on a known number of CPUs, or a secure web site may depend on a facility providing cryptography services for accelerated encryption and decryption to perform at peak efficiency.
Generally, a combination of approaches is used in computing environments to handle changes in dependency relationships (e.g., failure of or administrative removal of a system resource). The approach employed depends on such factors as the type of the system resource, the capabilities of the affected software applications, and the capabilities of the operating system.
One approach is to terminate and restart software applications depending on a system resource if the system resource is removed or reallocated, wholly or in part. Another approach is to execute software applications in a virtual machine environment where the applications use virtual system resources that are seemingly always available. Under this approach, reconfigurations or reallocations that may take place with the underlying physical system resources are not apparent to the executing applications. A third approach provides a centralized system event handler that notifies registered software applications of events affecting system resources after the events have occurred. A fourth approach is found in some computer systems that support dynamic reconfiguration (i.e., removal and addition of system components while the system is running). This approach involves the use of a scripting mechanism to permit software applications using a dynamically reconfigurable system component to take some limited actions before a reconfiguration operation is executed. An application may be registered for notification of a reconfiguration operation on a dynamically reconfigurable system component by registering a script in a reconfiguration framework. The reconfiguration framework launches the script in response to a reconfiguration request, if the request impacts components that are registered by the script. The application is afforded an opportunity to release the component, to perform an orderly shut down, or to refuse to allow the reconfiguration operation to proceed.